本系列文章已集結成冊與鐵人賽文章差異內容,有以下幾點:
更新至Laravel 8、基礎的PHP重點筆記、加強製作API流程細節、加入程式設計模式,優化、重構程式碼的部分,並且於書籍前面的章節介紹Git。
讓您從製作第一個簡單的API到優化自己的程式碼,分享我的經驗給您,打造自己的最強大腦API,若有興趣的朋友可以參考看看
此篇文章同步發於個人部落格
composer require laravel/passport
安裝完成大致上會顯示差不多內容。
animal/composer.json
可以看到多了 passport
php artisan migrate
如上圖 Passport 會幫助我們加入相關的資料表,儲存客戶端和Access Token 相關資料表。
客戶端的意思是指,開發者的網站或其他介面要先來我們的API系統,取的一組客戶端的ID 以及 secret,才能在他們自己的網站向我們請求Token,獲取會員的權限。
有點像是白名單的意思,要在這個API系統內有紀錄的才可以對我們申請代表會員的Token。
就跟Facebook 的帳號,可以登入很多網站一樣。例如 FB 帳號可以登入 iT邦幫忙 道理一樣。
Token 這是驗證用戶的憑證,明天會詳細介紹今天先把 Passport 套件裝好!
查看一下資料庫狀態剛剛下 php artisan migrate
指令以後的資料庫,新增了五張表。
然後運行命令會創建加密需要公鑰以及私鑰,讓我們可以安全的產生 Access Token。
php artisan passport:install
產生出來的公鑰、私鑰存放在 animal/storage
資料夾中
除此之外,它也會直接幫我們建置客戶端用來產生 Access Token 的資料,新建了兩種客戶端資料 personal access和password grant。
id、secret 就是我們客戶端開發者要在他們的網站,或是其他軟體介面上(手機APP...)請求會員身份的token時需要提供的內容。
基本內容都有了,接下來做一些設定,引用Laravel\Passport\HasApiTokenstrait
到App\User
Model 中
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
//略過
}
這個 trait 會幫我們加入 Passport 寫好的方法。
接著 AuthServiceProvider
中的 boot
方法中調用 Passport::routes
方法。
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
這個方法會註冊必要的路由去核發、換發、撤銷 Token以及請求客戶端的 id、secret 之類的路由,如下圖路由表顯示。
默認情況下,Passport發放的 Token 是有一年有效期的。
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport', //<-修改這裡
'provider' => 'users',
'hash' => false, //這個是Laravel 5.8 出現的,他主要是可以讓 Token 再 SHA-256 保護存入資料表
],
],
需要認證的API請求時,系統會去使用 Passport 的TokenGuard。
hash 這裡先不調整,以存文字的方式把Token存入資料表就好! 如果設定 true 等於存入資料表中的 Token 在 SHA-256 加密保護。
無法反向解開 Token,請求 Token 時回傳 未加密的 Token,資料表儲存 SHA-256 加密後的副本,所以必須要求客戶端請求Token 後一定要牢牢記住,不然無法解開。另外默認情況下,Passport發放的 Token 是有一年有效期的。
安裝完成!結束今天這回合~